//package com.zhs.gccs.utils;
//
//import static com.zhs.gccs.base.App.getApplication;
//
//import android.annotation.SuppressLint;
//import android.app.Activity;
//import android.content.Context;
//import android.content.pm.PackageManager;
//import android.location.Location;
//import android.util.Log;
//
//import com.baidu.location.BDAbstractLocationListener;
//import com.baidu.location.BDLocation;
//import com.zhs.gccs.base.App;
//import com.zhs.gccs.event.EventLocation;
//import com.zhs.gccs.service.LocationService;
//
//import org.greenrobot.eventbus.EventBus;
//
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//
//
//@SuppressLint("MissingPermission")
//public class GPS11Utils {
//    public final static String CoorType_GCJ02 = "gcj02";
//    public final static String CoorType_BD09LL= "bd09ll";
//    public final static String CoorType_BD09MC= "bd09";
//
//    /***
//     *61 ： GPS定位结果，GPS定位成功。
//     *62 ： 无法获取有效定位依据，定位失败，请检查运营商网络或者wifi网络是否正常开启，尝试重新请求定位。
//     *63 ： 网络异常，没有成功向服务器发起请求，请确认当前测试手机网络是否通畅，尝试重新请求定位。
//     *65 ： 定位缓存的结果。
//     *66 ： 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。
//     *67 ： 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。
//     *68 ： 网络连接失败时，查找本地离线定位时对应的返回结果。
//     *161： 网络定位结果，网络定位定位成功。
//     *162： 请求串密文解析失败。
//     *167： 服务端定位失败，请您检查是否禁用获取位置信息权限，尝试重新请求定位。
//     *502： key参数错误，请按照说明文档重新申请KEY。
//     *505： key不存在或者非法，请按照说明文档重新申请KEY。
//     *601： key服务被开发者自己禁用，请按照说明文档重新申请KEY。
//     *602： key mcode不匹配，您的ak配置过程中安全码设置有问题，请确保：sha1正确，“;”分号是英文状态；且包名是您当前运行应用的包名，请按照说明文档重新申请KEY。
//     *501～700：key验证失败，请按照说明文档重新申请KEY。
//     */
//
//    public static float[] EARTH_WEIGHT = {0.1f,0.2f,0.4f,0.6f,0.8f}; // 推算计算权重_地球
//    //public static float[] MOON_WEIGHT = {0.0167f,0.033f,0.067f,0.1f,0.133f};
//    //public static float[] MARS_WEIGHT = {0.034f,0.068f,0.152f,0.228f,0.304f};
//    public final static int RECEIVE_TAG = 1;
//    public final static int DIAGNOSTIC_TAG = 2;
//
//
//
//    private static final String TAG = "GPSUtils";
//    private static Activity mContext;
//
//    private static LocationService locationService;
//    private static BDLocation mLocation = null;
//
//
//    public GPS11Utils(Activity context) {
//        context.runOnUiThread(() -> {
//            this.mContext = context;
//            // -----------location config ------------
//            locationService = ((App) getApplication()).locationService;
//            //获取locationservice实例，建议应用中只初始化1个location实例，然后使用，可以参考其他示例的activity，都是通过此种方式获取locationservice实例的
//            locationService.registerListener(mListener);
//            //注册监听
//            int type = mContext.getIntent().getIntExtra("from", 0);
//            if (type == 0) {
//                locationService.setLocationOption(locationService.getDefaultLocationClientOption());
//            } else if (type == 1) {
//                locationService.start();
//            }
//            locationService.start();// 定位SDK
//        });
//    }
//
//    /**
//     * @return Location--->getLongitude()获取经度/getLatitude()获取纬度
//     */
//    public static BDLocation getLocation() {
//        if (mLocation == null) {
//            Log.e("GPSUtils", "setLocationData: 获取当前位置信息为空");
//            return null;
//        }
//        return mLocation;
//    }
//
//    public static void removeUpdates() {
//            if (null != locationService) {
//                locationService.unregisterListener(mListener); //注销掉监听
//                locationService.stop(); //停止定位服务
//            }
//    }
//
//    /*****
//     *
//     * 定位结果回调，重写onReceiveLocation方法，可以直接拷贝如下代码到自己工程中修改
//     *
//     */
//    private static BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
//
//        /**
//         * 定位请求回调函数
//         * @param location 定位结果
//         */
//        @Override
//        public void onReceiveLocation(BDLocation location) {
//
//            // TODO Auto-generated method stub
//            if (null != location && location.getLocType() != BDLocation.TypeServerError) {
////                int tag = 1;
////                StringBuffer sb = new StringBuffer(256);
////                sb.append("time : ");
////                /**
////                 * 时间也可以使用systemClock.elapsedRealtime()方法 获取的是自从开机以来，每次回调的时间；
////                 * location.getTime() 是指服务端出本次结果的时间，如果位置不发生变化，则时间不变
////                 */
////                sb.append(location.getTime());
////                sb.append("\nsysTime : ");
////                sb.append(SystemClock.elapsedRealtime());
////                sb.append("\nlocType : ");// 定位类型
////                sb.append(location.getLocType());
////                sb.append("\nlocType description : ");// *****对应的定位类型说明*****
////                sb.append(location.getLocTypeDescription());
////                sb.append("\nlatitude : ");// 纬度
////                sb.append(location.getLatitude());
////                sb.append("\nlongtitude : ");// 经度
////                sb.append(location.getLongitude());
////                sb.append("\nradius : ");// 半径
////                sb.append(location.getRadius());
////                sb.append("\nCountryCode : ");// 国家码
////                sb.append(location.getCountryCode());
////                sb.append("\nProvince : ");// 获取省份
////                sb.append(location.getProvince());
////                sb.append("\nCountry : ");// 国家名称
////                sb.append(location.getCountry());
////                sb.append("\ncitycode : ");// 城市编码
////                sb.append(location.getCityCode());
////                sb.append("\ncity : ");// 城市
////                sb.append(location.getCity());
////                sb.append("\nDistrict : ");// 区
////                sb.append(location.getDistrict());
////                sb.append("\nTown : ");// 获取镇信息
////                sb.append(location.getTown());
////                sb.append("\nStreet : ");// 街道
////                sb.append(location.getStreet());
////                sb.append("\naddr : ");// 地址信息
////                sb.append(location.getAddrStr());
////                sb.append("\nStreetNumber : ");// 获取街道号码
////                sb.append(location.getStreetNumber());
////                sb.append("\nUserIndoorState: ");// *****返回用户室内外判断结果*****
////                sb.append(location.getUserIndoorState());
////                sb.append("\nDirection(not all devices have value): ");
////                sb.append(location.getDirection());// 方向
////                sb.append("\nlocationdescribe: ");
////                sb.append(location.getLocationDescribe());// 位置语义化信息
////                sb.append("\nPoi: ");// POI信息
////                if (location.getPoiList() != null && !location.getPoiList().isEmpty()) {
////                    for (int i = 0; i < location.getPoiList().size(); i++) {
////                        Poi poi = (Poi) location.getPoiList().get(i);
////                        sb.append("poiName:");
////                        sb.append(poi.getName() + ", ");
////                        sb.append("poiTag:");
////                        sb.append(poi.getTags() + "\n");
////                    }
////                }
////                if (location.getPoiRegion() != null) {
////                    sb.append("PoiRegion: ");// 返回定位位置相对poi的位置关系，仅在开发者设置需要POI信息时才会返回，在网络不通或无法获取时有可能返回null
////                    PoiRegion poiRegion = location.getPoiRegion();
////                    sb.append("DerectionDesc:"); // 获取POIREGION的位置关系，ex:"内"
////                    sb.append(poiRegion.getDerectionDesc() + "; ");
////                    sb.append("Name:"); // 获取POIREGION的名字字符串
////                    sb.append(poiRegion.getName() + "; ");
////                    sb.append("Tags:"); // 获取POIREGION的类型
////                    sb.append(poiRegion.getTags() + "; ");
////                    sb.append("\nSDK版本: ");
////                }
////                int permission = checkPermission(mContext.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION);
////                sb.append("\npermsission: " + permission);
////                sb.append(locationService.getSDKVersion()); // 获取SDK版本
////                if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
////                    sb.append("\nspeed : ");
////                    sb.append(location.getSpeed());// 速度 单位：km/h
////                    sb.append("\nsatellite : ");
////                    sb.append(location.getSatelliteNumber());// 卫星数目
////                    sb.append("\nheight : ");
////                    sb.append(location.getAltitude());// 海拔高度 单位：米
////                    sb.append("\ngps status : ");
////                    sb.append(location.getGpsAccuracyStatus());// *****gps质量判断*****
////                    sb.append("\ndescribe : ");
////                    sb.append("gps定位成功");
////                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
////                    // 运营商信息
////                    if (location.hasAltitude()) {// *****如果有海拔高度*****
////                        sb.append("\nheight : ");
////                        sb.append(location.getAltitude());// 单位：米
////                    }
////                    sb.append("\noperationers : ");// 运营商信息
////                    sb.append(location.getOperators());
////                    sb.append("\ndescribe : ");
////                    sb.append("网络定位成功");
////                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
////                    sb.append("\ndescribe : ");
////                    sb.append("离线定位成功，离线定位结果也是有效的");
////                } else if (location.getLocType() == BDLocation.TypeServerError) {
////                    sb.append("\ndescribe : ");
////                    sb.append("服务端网络定位失败，可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com，会有人追查原因");
////                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
////                    sb.append("\ndescribe : ");
////                    sb.append("网络不同导致定位失败，请检查网络是否通畅");
////                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
////                    sb.append("\ndescribe : ");
////                    sb.append("无法获取有效定位依据导致定位失败，一般是由于手机的原因，处于飞行模式下一般会造成这种结果，可以试着重启手机");
////                }
//                //==================================================================================
//                if (location == null) {
//                    return;
//                }
//                //角度
//                // bdLocation.getDirection();
//                mLocation = location;
//                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                String time = location.getTime() + "";
//                Date date = null;
//                try {
//                    date = format.parse(time);
//                } catch (ParseException e) {
//                    e.printStackTrace();
//                }
//                System.out.print("Format To times:" + date.getTime());
//
//                long myTime = date.getTime();
//                int permission = checkPermission(mContext.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION);
//                Log.i(TAG, "时间：" + myTime + "");
//                Log.e(TAG, "经度：" + location.getLongitude());
//                Log.e(TAG, "纬度：" + location.getLatitude());
//                Log.e(TAG, "======================================");
//                Log.e(TAG, "=省：" + location.getProvince()+"  =");
//                Log.e(TAG, "=市：" + location.getCity()+"      =");
//                Log.e(TAG, "=县：" + location.getDistrict()+"  =");
//                Log.e(TAG, "=镇：" + location.getTown()+"      =");
//                Log.e(TAG, "======================================");
//                mContext.runOnUiThread(new Runnable() {
//                    @Override
//                    public void run() {
//                        if (null != location && !"4.9E-324".equals(location.getLongitude() + "")) {
//                            double[] wgs84 = gcj02towgs84(location.getLongitude(), location.getLatitude());
//                            // EventBus.getDefault().post(new LocationEvent(wgs84[0], wgs84[1], myTime,bdLocation.getProvince()+bdLocation.getCity()+bdLocation.getDistrict()+bdLocation.getTown()));
//                            EventBus.getDefault().post(new EventLocation(wgs84[0], wgs84[1], myTime,location.getTown()+""));
//
//                        }
//                    }
//                });
//            }
//        }
//
//        @Override
//        public void onConnectHotSpotMessage(String s, int i) {
//            super.onConnectHotSpotMessage(s, i);
//        }
//
//        /**
//         * 回调定位诊断信息，开发者可以根据相关信息解决定位遇到的一些问题
//         * @param locType 当前定位类型
//         * @param diagnosticType 诊断类型（1~9）
//         * @param diagnosticMessage 具体的诊断信息释义
//         */
//        @Override
//        public void onLocDiagnosticMessage(int locType, int diagnosticType, String diagnosticMessage) {
//            super.onLocDiagnosticMessage(locType, diagnosticType, diagnosticMessage);
//            int tag = 2;
//            StringBuffer sb = new StringBuffer(256);
//            sb.append("诊断结果: ");
//            if (locType == BDLocation.TypeNetWorkLocation) {
//                if (diagnosticType == 1) {
//                    sb.append("网络定位成功，没有开启GPS，建议打开GPS会更好");
//                    sb.append("\n" + diagnosticMessage);
//                } else if (diagnosticType == 2) {
//                    sb.append("网络定位成功，没有开启Wi-Fi，建议打开Wi-Fi会更好");
//                    sb.append("\n" + diagnosticMessage);
//                }
//            } else if (locType == BDLocation.TypeOffLineLocationFail) {
//                if (diagnosticType == 3) {
//                    sb.append("定位失败，请您检查您的网络状态");
//                    sb.append("\n" + diagnosticMessage);
//                }
//            } else if (locType == BDLocation.TypeCriteriaException) {
//                if (diagnosticType == 4) {
//                    sb.append("定位失败，无法获取任何有效定位依据");
//                    sb.append("\n" + diagnosticMessage);
//                } else if (diagnosticType == 5) {
//                    sb.append("定位失败，无法获取有效定位依据，请检查运营商网络或者Wi-Fi网络是否正常开启，尝试重新请求定位");
//                    sb.append(diagnosticMessage);
//                } else if (diagnosticType == 6) {
//                    sb.append("定位失败，无法获取有效定位依据，请尝试插入一张sim卡或打开Wi-Fi重试");
//                    sb.append("\n" + diagnosticMessage);
//                } else if (diagnosticType == 7) {
//                    sb.append("定位失败，飞行模式下无法获取有效定位依据，请关闭飞行模式重试");
//                    sb.append("\n" + diagnosticMessage);
//                } else if (diagnosticType == 9) {
//                    sb.append("定位失败，无法获取任何有效定位依据");
//                    sb.append("\n" + diagnosticMessage);
//                }
//            } else if (locType == BDLocation.TypeServerError) {
//                if (diagnosticType == 8) {
//                    sb.append("定位失败，请确认您定位的开关打开状态，是否赋予APP定位权限");
//                    sb.append("\n" + diagnosticMessage);
//                }
//            }
//           // logMsg(sb.toString(), tag);
//        }
//    };
//
//    public static int checkPermission(Context context, String permission) {
//
//        boolean allowedByPermission = true;
//        try {
//            int result = context.checkPermission(permission, android.os.Process.myPid(), android.os.Process.myUid());
//            allowedByPermission = (result == PackageManager.PERMISSION_GRANTED);
//        } catch (Exception e) {
//            allowedByPermission = true;
//        }
//        if (!allowedByPermission) {
//            return 0;
//        } else {
//            return 1;
//        }
//    }
//
//    static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;
//    static double PI = 3.1415926535897932384626;
//    static double a = 6378245.0;
//    static double ee = 0.00669342162296594323;
//
//    /**
//     * GCJ02 转换为 WGS84
//     *
//     * @param lng
//     * @param lat
//     * @returns {*[]}
//     */
//    static double[] gcj02towgs84(double lng, double lat) {
//        if (out_of_china(lng, lat)) {
//            double[] outDou = {lng, lat};
//            return outDou;
//        } else {
//            double dlat = transformlat(lng - 105.0, lat - 35.0);
//            double dlng = transformlng(lng - 105.0, lat - 35.0);
//            double radlat = lat / 180.0 * PI;
//            double magic = Math.sin(radlat);
//            magic = 1 - ee * magic * magic;
//            double sqrtmagic = Math.sqrt(magic);
//            dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
//            dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
//            double mglat = lat + dlat;
//            double mglng = lng + dlng;
//            double[] inDou = {lng * 2 - mglng, lat * 2 - mglat};
//            return inDou;
//        }
//    }
//
//    /**
//     * 判断是否在国内，不在国内则不做偏移
//     *
//     * @param lng
//     * @param lat
//     * @returns {boolean}
//     */
//    static boolean out_of_china(double lng, double lat) {
//        return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
//    }
//
//    static double transformlat(double lng, double lat) {
//        double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
//        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
//        ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
//        ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
//        return ret;
//    }
//
//    static double transformlng(double lng, double lat) {
//        double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
//        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
//        ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
//        ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
//        return ret;
//    }
//
//    //gps转照片的度分秒
//    public static String gpsInfoConvert(double gpsInfo) {
//        gpsInfo = Math.abs(gpsInfo);
//        String dms = Location.convert(gpsInfo, Location.FORMAT_SECONDS);
//        String[] splits = dms.split(":");
//        String[] secnds = (splits[2]).split("\\.");
//        String seconds;
//        if (secnds.length == 0) {
//            seconds = splits[2];
//        } else {
//            seconds = secnds[0];
//        }
//        return splits[0] + "/1," + splits[1] + "/1," + seconds + "/1";
//    }
//
//    //照片的度分秒转gps
//    public static Double convertToDegree(String stringDMS) {
//        Float result = null;
//        String[] DMS = stringDMS.split(",", 3);
//
//        String[] stringD = DMS[0].split("/", 2);
//        Double D0 = new Double(stringD[0]);
//        Double D1 = new Double(stringD[1]);
//        Double FloatD = DoubleOperation.div(D0, D1, 14);
//
//        String[] stringM = DMS[1].split("/", 2);
//        Double M0 = new Double(stringM[0]);
//        Double M1 = new Double(stringM[1]);
//        Double FloatM = DoubleOperation.div(M0, M1, 14);
//
//        String[] stringS = DMS[2].split("/", 2);
//        Double S0 = new Double(stringS[0]);
//        Double S1 = new Double(stringS[1]);
//        Double FloatS = DoubleOperation.div(S0, S1, 14);
//
//        //result = new Float(FloatD + (FloatM/60) + (FloatS/3600));
//        result = new Float(DoubleOperation.add(DoubleOperation.add(FloatD, DoubleOperation.div(FloatM, 60, 14)), DoubleOperation.div(FloatS, 3600, 14)));
//        return (double) result;
//    }
//
//
//}
